let a: string 
a = '12'

function fn (a: number, b: number):number {
    return  a + b
}
const res = fn(1, 2)

// 联合类型 ｜
let b : number | string
b = 123
b = '123'
// any 表示任意所有类型，相当于没有类型限制，不推荐使用
// 会污染其他变量的类型
let bb: any = '123'
// let cc: number 
let cc = bb

// void 表示没有任何类型
function fn2():void {
    return undefined
}
// never 表示永远没有类型，常用来抛出错误
function never(message:string): never {
    throw new Error(message);
}
// 类型断言:告诉解析器c变量就是string类型
    // 两种写法：
        // 1. 变量 as 类型
        // 2. <类型>变量
let c = '324'
let d = c as string
let e = <string>c
console.log('123');


class Person{
    private _name: string;

    constructor(name: string){
        this._name = name;
    }

    get name(){
        return this._name;
    }

    set name(name: string){
        this._name = name;
    }

}

const p1 = new Person('孙悟空');
console.log(p1.name); // 通过getter读取name属性
p1.name = '猪八戒'; // 通过setter修改name属性
console.log(p1.name);



